<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//  一般的构造函数模式
			// function Person(name,age){
			// 	this.name = name;
			// 	this.age = age
			// 	this.sayName = function(){
			// 		console.log('hello',name,age);
			// 	}
			// }
			// var p1 = new Person('fyr',18);
			// var p2 = new Person('zmm',20);
			// p1.sayName()
			// p1.sayName === p2.sayName  false:浪费内存。
			
			// 拓展的构造函数模式：  定义多个全局函数，会污染全局空间。
			// function Person(name,age){
			// 	this.name = name;
			// 	this.age = age
			// 	this.sayName = sayName;
			// }
			// function sayName(){
			// 		console.log('hello',this.name,age);
			// }
			// var p1 = new Person('fyr',18);
			// var p2 = new Person('zmm',20);
			
			//寄生构造函数模式：创建一个函数，函数内部实例化一个对象，并返回该对象，在外部使用new关键字来实例化对象
			// 问题 1：定义了相同的方法，各构造函数类似，浪费内存空间。
			//		2：instanceof运算符和prototype属性都没有意义  一般不适应该模式。
			// function Person(name,age){
			// 	var obj = new Object;
			// 	obj.name = name;
			// 	obj.age = age;
			// 	obj.sayName = function(){
			// 		console.log('hello',this.name,age);
			// 	}
			// }
			// var p1 = new Person('fyr',18);
			// var p2 = new Person('zmm',20);
			// p1.sayName()
			
			// 稳妥构造函数模式：结合闭包。
			// function Person(name){
			// 	var obj = new Object;
			// 	// name 属于私有属性
			// 	obj.sayName = function(){
			// 		console.log('hello',name);
			// 	}
			// 	return obj;
			// }
			// var p1 = Person('fyr')
			// p1.sayName()
			
		</script>
	</body>
</html>
